package com.eastfair.builder.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.builder.enumeration.ReportSpaceServiceAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceDrawingAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceHomeAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceVenueAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceReportSpaceStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceManageAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceFinalDrawingAuditStatusEnum;
import com.eastfair.builder.enumeration.ReportSpaceEarnestMoneyAuditStatusEnum;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 报馆记录表
 * </p>
 *
 * @author dqq
 * @since 2023-06-05
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("bd_report_space")
@ApiModel(value = "ReportSpace", description = "报馆记录表")
@AllArgsConstructor
public class ReportSpace extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用：1是；0否")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 报馆编号
     */
    @ApiModelProperty(value = "报馆编号")
    @Size(max = 64, message = "报馆编号长度不能超过64")
    @TableField(value = "report_space_number", condition = LIKE)
    @Excel(name = "报馆编号")
    private String reportSpaceNumber;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 1000, message = "备注长度不能超过1000")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;

    /**
     * 展会ID
     */
    @ApiModelProperty(value = "展会ID")
    @TableField(value = "exhibition_id")
    @Excel(name = "展会ID")
    private Long exhibitionId;

    /**
     * 展会名称
     */
    @ApiModelProperty(value = "展会名称")
    @Size(max = 100, message = "展会名称长度不能超过100")
    @TableField(value = "exhibition_name", condition = LIKE)
    @Excel(name = "展会名称")
    private String exhibitionName;

    /**
     * 参展商ID
     */
    @ApiModelProperty(value = "参展商ID")
    @TableField(value = "exhibitor_id")
    @Excel(name = "参展商ID")
    private Long exhibitorId;

    /**
     * 参展商名称
     */
    @ApiModelProperty(value = "参展商名称")
    @Size(max = 100, message = "参展商名称长度不能超过100")
    @TableField(value = "exhibitor_name", condition = LIKE)
    @Excel(name = "参展商名称")
    private String exhibitorName;

    /**
     * 参展商联系人
     */
    @ApiModelProperty(value = "参展商联系人")
    @Size(max = 100, message = "参展商联系人长度不能超过100")
    @TableField(value = "exhibitor_contact", condition = LIKE)
    @Excel(name = "参展商联系人")
    private String exhibitorContact;

    /**
     * 参展商联系人手机号
     */
    @ApiModelProperty(value = "参展商联系人手机号")
    @Size(max = 255, message = "参展商联系人手机号长度不能超过255")
    @TableField(value = "exhibitor_contact_mobile", condition = LIKE)
    @Excel(name = "参展商联系人手机号")
    private String exhibitorContactMobile;

    /**
     * 展厅编号
     */
    @ApiModelProperty(value = "展厅编号")
    @Size(max = 100, message = "展厅编号长度不能超过100")
    @TableField(value = "space_code", condition = LIKE)
    @Excel(name = "展厅编号")
    private String spaceCode;

    /**
     * 展馆号
     */
    @ApiModelProperty(value = "展馆号")
    @Size(max = 100, message = "展馆号长度不能超过100")
    @TableField(value = "space_name", condition = LIKE)
    @Excel(name = "展馆号")
    private String spaceName;

    /**
     * 展位编号
     */
    @ApiModelProperty(value = "展位编号")
    @Size(max = 100, message = "展位编号长度不能超过100")
    @TableField(value = "site_code", condition = LIKE)
    @Excel(name = "展位编号")
    private String siteCode;

    /**
     * 展位号
     */
    @ApiModelProperty(value = "展位号")
    @Size(max = 100, message = "展位号长度不能超过100")
    @TableField(value = "site_name", condition = LIKE)
    @Excel(name = "展位号")
    private String siteName;

    /**
     * 展位类型
     */
    @ApiModelProperty(value = "展位类型")
    @Size(max = 64, message = "展位类型长度不能超过64")
    @TableField(value = "site_type", condition = LIKE)
    @Excel(name = "展位类型")
    private String siteType;

    /**
     * 展位面积
     */
    @ApiModelProperty(value = "展位面积")
    @TableField(value = "site_area")
    @Excel(name = "展位面积")
    private BigDecimal siteArea;

    /**
     * 搭建商ID
     */
    @ApiModelProperty(value = "搭建商ID")
    @TableField(value = "builder_id")
    @Excel(name = "搭建商ID")
    private Long builderId;

    /**
     * 搭建商名称
     */
    @ApiModelProperty(value = "搭建商名称")
    @Size(max = 100, message = "搭建商名称长度不能超过100")
    @TableField(value = "builder_name", condition = LIKE)
    @Excel(name = "搭建商名称")
    private String builderName;

    /**
     * 主场ID(弃用)
     */
    @ApiModelProperty(value = "主场ID(弃用)")
    @TableField(value = "home_court_id")
    @Excel(name = "主场ID(弃用)")
    private Long homeCourtId;

    /**
     * 主场名称(弃用)
     */
    @ApiModelProperty(value = "主场名称(弃用)")
    @Size(max = 100, message = "主场名称(弃用)长度不能超过100")
    @TableField(value = "home_court_name", condition = LIKE)
    @Excel(name = "主场名称(弃用)")
    private String homeCourtName;

    /**
     * 报馆图纸审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆图纸审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "drawing_audit_status")
    @Excel(name = "报馆图纸审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceDrawingAuditStatusEnum drawingAuditStatus;

    /**
     * 报馆图纸审核总意见
     */
    @ApiModelProperty(value = "报馆图纸审核总意见")
    @Size(max = 200, message = "报馆图纸审核总意见长度不能超过200")
    @TableField(value = "drawing_audit_opinion", condition = LIKE)
    @Excel(name = "报馆图纸审核总意见")
    private String drawingAuditOpinion;

    /**
     * 报馆服务审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆服务审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "service_audit_status")
    @Excel(name = "报馆服务审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceServiceAuditStatusEnum serviceAuditStatus;

    /**
     * 报馆服务审核总意见
     */
    @ApiModelProperty(value = "报馆服务审核总意见")
    @Size(max = 200, message = "报馆服务审核总意见长度不能超过200")
    @TableField(value = "service_audit_opinion", condition = LIKE)
    @Excel(name = "报馆服务审核总意见")
    private String serviceAuditOpinion;

    /**
     * 报馆状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "report_space_status")
    @Excel(name = "报馆状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceReportSpaceStatusEnum reportSpaceStatus;

    /**
     * 报馆管理费审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆管理费审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "manage_audit_status")
    @Excel(name = "报馆管理费审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceManageAuditStatusEnum manageAuditStatus;

    /**
     * 报馆管理费审核总意见
     */
    @ApiModelProperty(value = "报馆管理费审核总意见")
    @Size(max = 200, message = "报馆管理费审核总意见长度不能超过200")
    @TableField(value = "manage_audit_opinion", condition = LIKE)
    @Excel(name = "报馆管理费审核总意见")
    private String manageAuditOpinion;

    /**
     * 报馆保证金审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆保证金审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "earnest_money_audit_status")
    @Excel(name = "报馆保证金审核总状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceEarnestMoneyAuditStatusEnum earnestMoneyAuditStatus;

    /**
     * 报馆保证金审核总意见
     */
    @ApiModelProperty(value = "报馆保证金审核总意见")
    @Size(max = 200, message = "报馆保证金审核总意见长度不能超过200")
    @TableField(value = "earnest_money_audit_opinion", condition = LIKE)
    @Excel(name = "报馆保证金审核总意见")
    private String earnestMoneyAuditOpinion;

    /**
     * 主场审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "主场审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "home_audit_status")
    @Excel(name = "主场审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceHomeAuditStatusEnum homeAuditStatus;

    /**
     * 场馆审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;NOT_NEED_AUDIT:无需审核}
     */
    @ApiModelProperty(value = "场馆审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;NOT_NEED_AUDIT:无需审核}")
    @TableField(value = "venue_audit_status")
    @Excel(name = "场馆审核状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过;NOT_NEED_AUDIT:无需审核}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED", "无需审核_NOT_NEED_AUDIT",  "_null"})
    private ReportSpaceVenueAuditStatusEnum venueAuditStatus;

    /**
     * 报馆图纸审核最终状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}
     */
    @ApiModelProperty(value = "报馆图纸审核最终状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}")
    @TableField(value = "final_drawing_audit_status")
    @Excel(name = "报馆图纸审核最终状态 #{NOT_SUBMIT:未提交;SUBMIT:待审核;APPROVED:审核通过;NOT_APPROVED:审核未通过}", replace = {"未提交_NOT_SUBMIT", "待审核_SUBMIT", "审核通过_APPROVED", "审核未通过_NOT_APPROVED",  "_null"})
    private ReportSpaceFinalDrawingAuditStatusEnum finalDrawingAuditStatus;


    @Builder
    public ReportSpace(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    String reportSpaceNumber, String remark, Long exhibitionId, String exhibitionName, Long exhibitorId, String exhibitorName, 
                    String exhibitorContact, String exhibitorContactMobile, String spaceCode, String spaceName, String siteCode, String siteName, 
                    String siteType, BigDecimal siteArea, Long builderId, String builderName, Long homeCourtId, String homeCourtName, 
                    ReportSpaceDrawingAuditStatusEnum drawingAuditStatus, String drawingAuditOpinion, ReportSpaceServiceAuditStatusEnum serviceAuditStatus, String serviceAuditOpinion, ReportSpaceReportSpaceStatusEnum reportSpaceStatus, ReportSpaceManageAuditStatusEnum manageAuditStatus, 
                    String manageAuditOpinion, ReportSpaceEarnestMoneyAuditStatusEnum earnestMoneyAuditStatus, String earnestMoneyAuditOpinion, ReportSpaceHomeAuditStatusEnum homeAuditStatus, ReportSpaceVenueAuditStatusEnum venueAuditStatus, ReportSpaceFinalDrawingAuditStatusEnum finalDrawingAuditStatus) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.reportSpaceNumber = reportSpaceNumber;
        this.remark = remark;
        this.exhibitionId = exhibitionId;
        this.exhibitionName = exhibitionName;
        this.exhibitorId = exhibitorId;
        this.exhibitorName = exhibitorName;
        this.exhibitorContact = exhibitorContact;
        this.exhibitorContactMobile = exhibitorContactMobile;
        this.spaceCode = spaceCode;
        this.spaceName = spaceName;
        this.siteCode = siteCode;
        this.siteName = siteName;
        this.siteType = siteType;
        this.siteArea = siteArea;
        this.builderId = builderId;
        this.builderName = builderName;
        this.homeCourtId = homeCourtId;
        this.homeCourtName = homeCourtName;
        this.drawingAuditStatus = drawingAuditStatus;
        this.drawingAuditOpinion = drawingAuditOpinion;
        this.serviceAuditStatus = serviceAuditStatus;
        this.serviceAuditOpinion = serviceAuditOpinion;
        this.reportSpaceStatus = reportSpaceStatus;
        this.manageAuditStatus = manageAuditStatus;
        this.manageAuditOpinion = manageAuditOpinion;
        this.earnestMoneyAuditStatus = earnestMoneyAuditStatus;
        this.earnestMoneyAuditOpinion = earnestMoneyAuditOpinion;
        this.homeAuditStatus = homeAuditStatus;
        this.venueAuditStatus = venueAuditStatus;
        this.finalDrawingAuditStatus = finalDrawingAuditStatus;
    }

}
